package com.mnb.base.scheduler;

import com.mnb.base.service.impl.RainfallCalculationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDate;

@Component
public class DailyRainfallScheduler {

    private static final Logger logger = LoggerFactory.getLogger(DailyRainfallScheduler.class);

    @Autowired
    private RainfallCalculationService rainfallCalculationService;

    /**
     * 每天上午8点执行日降雨量计算
     * cron表达式：秒 分 时 日 月 周
     * 0 0 8 * * ? 表示每天上午8点执行
     */
    @Scheduled(cron = "0 0 8 * * ?")
    public void executeDailyRainfallCalculation() {
        try {
            logger.info("开始执行定时日降雨量计算任务");

            // 计算昨天的日降雨量（因为我们要计算前一天8点到当天8点的数据）
            LocalDate targetDate = LocalDate.now();

            rainfallCalculationService.calculateDailyRainfall(targetDate);

            logger.info("定时日降雨量计算任务执行完成");
        } catch (Exception e) {
            logger.error("执行定时日降雨量计算任务时发生错误: {}", e.getMessage(), e);
        }
    }

    /**
     * 应用启动时执行一次，用于处理可能遗漏的计算
     * 延迟5秒执行，确保数据库连接已建立
     */
//    @Scheduled(initialDelay = 5000, fixedDelay = Long.MAX_VALUE)
//    public void executeOnStartup() {
//        try {
//            logger.info("应用启动，检查是否需要执行遗漏的日降雨量计算");
//
//            // 这里可以添加逻辑来检查是否有遗漏的计算
//            // 例如：检查最近几天的DYP记录是否完整
//
//            logger.info("启动检查完成");
//        } catch (Exception e) {
//            logger.error("启动检查时发生错误: {}", e.getMessage(), e);
//        }
//    }
}
